﻿using System;
using System.Collections.Generic;
using System.Linq;
using System.Text;

using System.Data.SqlClient;
using System.Data;

using SIGERP_Entidades;

namespace SIGERP_Datos
{
    public class HndTipoDerivacion
    {
        public static List<TipoDerivacion> getAll()
        {
            DataTable tabla = Conexion.ejecutaSelect("SELECT * FROM dbo.tipo_derivacion" + " ORDER BY descripcion_tipo");
            var derivaciones = new List<TipoDerivacion>();
            foreach (DataRow dtRow in tabla.Rows)
            {
                TipoDerivacion td = new TipoDerivacion(dtRow);
                derivaciones.Add(td);
            }
            return derivaciones;
        }

        public static TipoDerivacion getOne(int id)
        {
            DataTable tabla = Conexion.ejecutaSelect("SELECT * FROM dbo.tipo_derivacion WHERE id_tipo_derivacion=" + id+" ORDER BY descripcion_tipo");
            DataRow dtRow = tabla.Rows[0];
            TipoDerivacion td = new TipoDerivacion(dtRow);
            return td;
        }

        public static Boolean insert(TipoDerivacion td)
        {
            SqlCommand comando = new SqlCommand();
            comando.CommandText = "INSERT INTO dbo.tipo_derivacion (descripcion_tipo,habilitado,es_rechazo) VALUES (@descripcion_tipo,1,@es_rechazo)";
            comando.Parameters.AddWithValue("@descripcion_tipo", td.descripcion);
            if (td.es_rechazo) comando.Parameters.AddWithValue("@es_rechazo", 1);
            else comando.Parameters.AddWithValue("@es_rechazo", 0);
            return Conexion.ejecutaComando(comando);
        }

        public static Boolean update(TipoDerivacion td)
        {
            SqlCommand comando = new SqlCommand();
            comando.CommandText = "UPDATE dbo.tipo_derivacion SET descripcion_tipo=@descripcion_tipo,habilitado=@habilitado,es_rechazo=@es_rechazo WHERE id_tipo_derivacion=@id";
            comando.Parameters.AddWithValue("@descripcion_tipo", td.descripcion);
            if (td.habilitado) comando.Parameters.AddWithValue("@habilitado", 1);
            else comando.Parameters.AddWithValue("@habilitado", 0);
            if (td.es_rechazo) comando.Parameters.AddWithValue("@es_rechazo", 1);
            else comando.Parameters.AddWithValue("@es_rechazo", 0);
            comando.Parameters.AddWithValue("@id", td.id);
          
            return Conexion.ejecutaComando(comando);
        }

        public static Boolean delete(TipoDerivacion td)
        {
            SqlCommand comando = new SqlCommand();
            comando.CommandText = "DELETE FROM dbo.tipo_derivacion WHERE id_tipo_derivacion=@id";
            comando.Parameters.AddWithValue("@id", td.id);
            return Conexion.ejecutaComando(comando);
        }

        public static List<TipoDerivacion> getAllEnabled()
        {
            DataTable tabla = Conexion.ejecutaSelect("SELECT * FROM dbo.tipo_derivacion WHERE habilitado=1 " + " ORDER BY descripcion_tipo");
            var derivaciones = new List<TipoDerivacion>();
            foreach (DataRow dtRow in tabla.Rows)
            {
                TipoDerivacion td = new TipoDerivacion(dtRow);
                derivaciones.Add(td);
            }
            return derivaciones;
        }

        public static List<TipoDerivacion> getAllEnabled(Boolean es_rechazo)
        {
            String condicion = "";
            if (es_rechazo) condicion = " AND es_rechazo=1 ";
            else condicion = " AND es_rechazo=0 ";
            DataTable tabla = Conexion.ejecutaSelect("SELECT * FROM dbo.tipo_derivacion WHERE habilitado=1 " +condicion+ " ORDER BY descripcion_tipo");
            var derivaciones = new List<TipoDerivacion>();
            foreach (DataRow dtRow in tabla.Rows)
            {
                TipoDerivacion td = new TipoDerivacion(dtRow);
                derivaciones.Add(td);
            }
            return derivaciones;
        }

        public static bool verificarSiExiste(string descripcion_derivacion)
        {
            DataTable tabla = Conexion.ejecutaSelect("SELECT COUNT(*) FROM dbo.tipo_derivacion WHERE descripcion_tipo='" + descripcion_derivacion + "'");
            DataRow dtRow = tabla.Rows[0];

            bool existe = false;
            if (Convert.ToInt32(dtRow[0]) > 0) existe = true;
            return existe;
        }

        public static bool hayDerivacionesAsociadas(TipoDerivacion td)
        {
            DataTable tabla = Conexion.ejecutaSelect("SELECT COUNT(*) FROM dbo.derivacion WHERE id_tipo_derivacion=" + td.id);
            DataRow dtRow = tabla.Rows[0];

            bool existe = false;
            if (Convert.ToInt32(dtRow[0]) > 0) existe = true;
            return existe;
        }

        public static Boolean disable(TipoDerivacion td)
        {
            SqlCommand comando = new SqlCommand();
            comando.CommandText = "UPDATE dbo.tipo_derivacion SET habilitado=0 WHERE id_tipo_derivacion=@id";
            comando.Parameters.AddWithValue("@id", td.id);

            return Conexion.ejecutaComando(comando);
        }
    }
    
}
